package com.nlelpct.manage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nlelpct.manage.model.entity.SysDept;
import com.nlelpct.manage.model.query.DeptTreeQuery;
import com.nlelpct.manage.model.query.InsertAndUpdateDeptQuery;
import com.nlelpct.manage.model.vo.AddDepartmentVo;
import com.nlelpct.manage.model.vo.DepartmentTreesVo;
import com.nlelpct.manage.model.vo.EditDepartmentVo;
import com.nlelpct.manage.model.vo.ResponseResult;

import java.util.List;

public interface SysDepartmentService extends IService<SysDept> {

    /**
     * 获取部门树结构信息
     *
     * @param deptTreeQuery
     *
     * @return <List<DepartmentTreesVo>>
     */
    ResponseResult<List<DepartmentTreesVo>> getDepartmentTree(DeptTreeQuery deptTreeQuery);


    /**
     * 添加部门信息
     *
     * @param insertDeptQuery 要添加部门的基本信息
     */
    void addDepartment(InsertAndUpdateDeptQuery insertDeptQuery);

    /**
     * 编辑部门信息
     *
     * @param updateDeptQuery 要编辑部门的基本信息
     */
    void editDepartmentById(InsertAndUpdateDeptQuery updateDeptQuery);

    /**
     * 校验部门是否可以删除
     *
     * @param deptId 部门ID
     * @return 判断结果
     */
    ResponseResult<Boolean> deleteDeptValidate(String deptId);


    /**
     * 根据部门ID删除部门
     *
     * @param deptId 部门ID
     */
    void removeDept(String deptId);


    /**
     * 添加部门-更新部门时判断部门名称是否重复
     *
     * @param validateDeptNameQuery 部门ID和名称
     * @return 判断结果 true为没有重复可以使用
     */
    ResponseResult<Boolean> validateDeptName(InsertAndUpdateDeptQuery validateDeptNameQuery);

    /**
     * 添加部门-更新部门时判断部门编号是否重复
     *
     * @param validateDeptNumQuery 部门ID和部门编号
     * @return 判断结果 true为没有重复可以使用
     */
    ResponseResult<Boolean> validateDeptNum(InsertAndUpdateDeptQuery validateDeptNumQuery);

}
